package com.tyros.common.secure.symmetrics;

import com.tyros.common.secure.codec.Codec;

import java.nio.charset.StandardCharsets;

/**
 * 对称加密算法工具类，默认使用 AES
 *
 * @author zsy
 */
public class SymmetricKit {

    private volatile static Symmetric DEFAULT_SYMMETRIC = new AesGcm();

    /**
     * 加密
     *
     * @param data 原文
     * @param key  base64编码的密钥,要求16字节以上
     * @return java.lang.String base64编码的密文
     */
    public static String encrypt(String data, String key) {
        return encrypt(data.getBytes(StandardCharsets.UTF_8), Codec.BASE64.decode(key));
    }

    /**
     * 加密
     *
     * @param rawData     原文
     * @param rawPassword 密钥
     * @return java.lang.String base64编码的密文
     */
    public static String encrypt(byte[] rawData, byte[] rawPassword) {
        return Codec.BASE64.encode(DEFAULT_SYMMETRIC.encrypt(rawData, rawPassword));
    }

    /***
     * description: 解密 
     *
     * @param encryptedData base64编码的密文
     * @param rawPassword base64编码的密钥
     * @return java.lang.String 原文
     */
    public static String decrypt(String encryptedData, String rawPassword) {
        return decrypt(Codec.BASE64.decode(encryptedData), Codec.BASE64.decode(rawPassword));
    }

    public static String decrypt(byte[] encryptedData, byte[] rawPassword) {
        return new String(DEFAULT_SYMMETRIC.decrypt(encryptedData, rawPassword));
    }

    public static void setSymmetric(Symmetric symmetric) {
        DEFAULT_SYMMETRIC = symmetric;
    }
}
